package com.erp.staobaotrasg.utils.m;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.widget.ImageView;


import org.xutils.image.ImageOptions;

import java.io.InputStream;

/**
 * Function : 封装的图片加载工具的类
 * 1. 实现本地保存
 * 2. 取出的时候，先判断本地是否存在，再进行加载
 * 3. 分出加载高低质量大图
 * Created by cyx
 * E-mial: cfgnqk@sina.com
 * on 2016/3/16.
 */
public class MCBitmapUtils {
    //私有化构造方法 全部使用静态的方法
    private MCBitmapUtils() {
    }

    /**
     * 利用xutils 加载低质量的图片
     *
     * @return 返回位图
     */
    public static Bitmap getBitmapLByXutils() {
        Bitmap retB = null;
        return retB;
    }

    /**
     * 利用xutils 加载高质量的图片
     *
     * @return 返回位图
     */
    public static Bitmap getBitmapHByXutils() {
        Bitmap retB = null;
        return retB;
    }

    /**
     * 利用自己的方法 加载低质量的图片
     *
     * @return 返回位图
     */
    public static Bitmap getBitmapLByU() {
        Bitmap retB = null;
        return retB;
    }

    /**
     * 利用自己的方法 加载高质量的图片
     *
     * @return 返回位图
     */
    public static Bitmap getBitmapHByU() {
        Bitmap retB = null;
        return retB;
    }

    /**
     * 利用xutils 进行加载图片
     *
     * @param imgV   加载的控件
     * @param url    加载的地址
     * @param width  缩放图片的宽度
     * @param height 缩放图片的高度
     */
    public static void initImageLByXutils(ImageView imgV, final String url, int width, int height) {
        if (MCFileUtil.hasImageBitmap(url)) { //进行判断是否含有图片 含有图片直接进行加载
            imgV.setImageBitmap(MCFileUtil.readImageFromLocal(url));
        } else { // 没有图片 网络加载并且保存
            ImageOptions options = new ImageOptions.Builder()
                    // 是否忽略GIF格式的图片
                    .setIgnoreGif(false)
                    .setImageScaleType(ImageView.ScaleType.FIT_XY)    // 图片缩放模式 //   .setLoadingDrawableId(R.mipmap.ic_launcher) // 下载中显示的图片
//                    .setFailureDrawableId(R.drawable.img_default)   // 下载失败显示的图片
                    .setSize(width, height) // 得到ImageOptions 大小
                    .setUseMemCache(true)
                    .build();
            MCxUtils.xInitAndSaveImage(imgV, url, options);
        }
    }

    /**
     * 利用 xutils 直接加载高质量图片到控件
     *
     * @param imgV 加载的控件
     * @param url  加载的地址
     */
    public static void initImageHByXutils(ImageView imgV, String url) {
        if (MCFileUtil.hasImageBitmap(url)) { //进行判断是否含有图片 含有图片直接进行加载
            imgV.setImageBitmap(MCFileUtil.readImageFromLocal(url));
        } else { // 没有图片 网络加载并且保存
            ImageOptions options = new ImageOptions.Builder()
                   // .setLoadingDrawableId(R.drawable.icon_default_header)   // 下载中显示的图片
                    .setImageScaleType(ImageView.ScaleType.FIT_XY)
               //     .setFailureDrawableId(R.drawable.icon_default_header) // 下载失败显示的图片
                    .build();
            MCxUtils.xInitAndSaveImage(imgV, url, options);
        }


    }

    public static void initImagerLByU() {
    }

    public static void initImagerHByU() {
    }

    /**
     * 以最省内存的方式读取本地资源的图片
     *
     * @param context
     * @param resId
     * @return
     */
    public static Bitmap readResBitMap(Context context, int resId) {
        BitmapFactory.Options opt = new BitmapFactory.Options();
        opt.inPreferredConfig = Bitmap.Config.RGB_565;
        opt.inPurgeable = true;
        opt.inInputShareable = true;
        //获取资源图片
        InputStream is = context.getResources().openRawResource(resId);
        return BitmapFactory.decodeStream(is, null, opt);
    }

    /**
     * 获取本地图片并指定高度和宽度
     * 需要优化 大小的读取方式
     */
    public static Bitmap getNativeImage(String imagePath) {
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        // 获取这个图片的宽和高
        Bitmap myBitmap = BitmapFactory.decodeFile(imagePath, options); //此时返回myBitmap为空
        //计算缩放比
        int be = (int) (options.outHeight / (float) 200);
        int ys = options.outHeight % 200;//求余数
        float fe = ys / (float) 200;
        if (fe >= 0.5)
            be = be + 1;
        if (be <= 0)
            be = 1;
        options.inSampleSize = be;
        //重新读入图片，注意这次要把options.inJustDecodeBounds 设为 false
        options.inJustDecodeBounds = false;
        myBitmap = BitmapFactory.decodeFile(imagePath, options);
        return myBitmap;
    }


    /**
     * 以最省内存的方式读取本地资源的图片 或者SDCard中的图片
     *
     * @param imagePath 图片在SDCard中的路径
     * @return
     */
    public static Bitmap getSDCardImg(String imagePath) {
        BitmapFactory.Options opt = new BitmapFactory.Options();
        opt.inPreferredConfig = Bitmap.Config.RGB_565;
        opt.inPurgeable = true;
        opt.inInputShareable = true;
        //获取资源图片
        return BitmapFactory.decodeFile(imagePath, opt);
    }
}
